﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmServiciosSeguimiento : Form
    {
        public frmServiciosSeguimiento()
        {
            InitializeComponent();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void IniciarControles()
        {
            txtNroServicio.Text = string.Empty;
            txtNroSocio.Text = string.Empty;
            txtNroSocio.Enabled = false;
            dtpDesde.Enabled = false;
            dtpHasta.Enabled = false;
            this.ActiveControl = txtNroServicio;

            dgvServicios.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        }

        private void frmServiciosSeguimiento_Load(object sender, EventArgs e)
        {
            IniciarControles();

            GetServicios();
        }

        private void GetServicios()
        {
            try
            {
                var query = (from row in Servicios.FindAllSolicitudesConSocioServicio().Take(100)
                             select row).ToList();

                dgvServicios.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvServicios.Rows.Add(String.Format("{0:0000}", fila.id), fila.socio.numero_certificado, fila.socio.apellido + ", " + fila.socio.nombres,
                        fila.servicio.servicio, fila.fecha.ToShortDateString(), fila.beneficiario, fila.direccion_salida, fila.direccion_destino,
                        fila.observaciones, fila.activo);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ckbNumeroCert_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbNumeroCert.CheckState == CheckState.Checked)
            {
                txtNroSocio.Enabled = true;
                txtNroSocio.Focus();
            }
            else
            {
                txtNroSocio.Enabled = false;
                txtNroSocio.Text = string.Empty;
            }
        }

        private void FiltarForm()
        {
            string numero_servicio = txtNroServicio.Text == string.Empty ? null : txtNroServicio.Text;
            string numero_certificado = txtNroSocio.Text == string.Empty ? null : txtNroSocio.Text;

            DateTime? desde = ckbFechas.Checked ? (DateTime?)dtpDesde.Value : null;
            DateTime? hasta = ckbFechas.Checked ? (DateTime?)dtpHasta.Value : null;

            try
            {
                var query = (from row in Servicios.FindAllCondicional(numero_servicio, numero_certificado, desde, hasta).Take(100)
                             select row).ToList();

                dgvServicios.Rows.Clear();
                foreach (var fila in query)
                {
                    dgvServicios.Rows.Add(String.Format("{0:0000}", fila.id), fila.socio.numero_certificado, fila.socio.apellido + ", " + fila.socio.nombres,
                        fila.servicio.servicio, fila.fecha.ToShortDateString(), fila.beneficiario, fila.direccion_salida, fila.direccion_destino,
                        fila.observaciones, fila.activo);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void ckbFechas_CheckedChanged(object sender, EventArgs e)
        {
            if (ckbFechas.CheckState == CheckState.Checked)
            {
                dtpHasta.Enabled = true;
                dtpDesde.Enabled = true;

                dtpDesde.Focus();
            }
            else
            {
                dtpHasta.Enabled = false;
                dtpDesde.Enabled = false;

                dtpDesde.Value = DateTime.Now;
                dtpHasta.Value = DateTime.Now;
            }


        }

        private void txtNroServicio_TextChanged(object sender, EventArgs e)
        {
            FiltarForm();
        }

        private void txtNroSocio_TextChanged(object sender, EventArgs e)
        {
            FiltarForm();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            FiltarForm();
        }

        private void txtNroServicio_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(txtNroServicio, "Solo se permiten números en el campo Nro. Servicio.");
                e.Handled = true;
                return;
            }
        }

        private void txtNroSocio_KeyPress(object sender, KeyPressEventArgs e)
        {
            error.Clear();
            if (!(char.IsNumber(e.KeyChar)) && (e.KeyChar != (char)Keys.Back))
            {
                error.SetError(ckbNumeroCert, "Solo se permiten números en el campo Nro. Socio.");
                e.Handled = true;
                return;
            }
        }

        private void dgvServicios_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex.Equals(10))
            {
                int afiliado_id = Convert.ToInt32(dgvServicios.Rows[e.RowIndex].Cells[0].Value);
                frmServiciosSolicitudReporte frm = new frmServiciosSolicitudReporte(afiliado_id);
                frm.MdiParent = this.MdiParent;
                frm.Show();
            }


        }

        private void dgvServicios_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {

            try
            {
                int solicitud_id = Convert.ToInt32(dgvServicios.Rows[e.RowIndex].Cells[0].Value);
                ServicioSocio solicitud = Servicios.FindByIdConSocioServicio(solicitud_id);
                
                if (solicitud.activo != 0)
                {
                    frmServicioCompletado frm = new frmServicioCompletado(solicitud_id);
                    frm.MdiParent = this.MdiParent;
                    frm.Show();
                }
                else
                {
                    MessageBox.Show("El servicio seleccionado ya se encuentra cumplimentado.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void frmServiciosSeguimiento_Activated(object sender, EventArgs e)
        {
            FiltarForm();
        }
    }
}
